home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / programming / c / stormamiga_lib-v45_00d / include / sys / stat.h < prev    next >
C/C++ Source or Header  |  2000-02-28  |  4KB  |  143 lines

  1. #ifndef SYS_STAT_H
  2. #define SYS_STAT_H
  3.  
  4. /*
  5. **       $VER: sys/stat.h 1.6 (31.10.99)
  6. **            Includes Release 45.00
  7. **
  8. **    Copyright © 1996/2000 by CyberdyneSystems
  9. **
  10. **            written by Matthias Henze
  11. **               All Rights Reserved
  12. */
  13.  
  14. #ifndef STORMAMIGA_H
  15.   #include <stormamiga.h>
  16. #endif
  17. #ifndef SYS_TYPES_H
  18.   #include <sys/types.h>
  19. #endif
  20. #ifndef SYS_TIME_H
  21.   #include <sys/time.h>
  22. #endif
  23.  
  24. #ifdef __cplusplus
  25.   extern "C" {
  26. #endif
  27.  
  28. struct stat
  29. {
  30.   dev_t   st_dev;           /* inode's device */
  31.   ino_t   st_ino;           /* inode's number */
  32.   ushort  st_mode;          /* inode protection mode */
  33.   short   st_nlink;         /* number of hard links */
  34.   uid_t   st_uid;           /* user ID of the file's owner */
  35.   gid_t   st_gid;           /* group ID of the file's group */
  36.   dev_t   st_rdev;          /* device type */
  37.   off_t   st_size;          /* file size, in bytes */
  38.   time_t  st_atime;         /* time of last access */
  39.   int     st_spare1;
  40.   time_t  st_mtime;         /* time of last data modification */
  41.   int     st_spare2;
  42.   time_t  st_ctime;         /* time of last file status change */
  43.   int     st_spare3;
  44.   long    st_blksize;       /* optimal blocksize for I/O */
  45.   long    st_blocks;        /* blocks allocated for file */
  46.   long    st_spare4[2];
  47. };
  48.  
  49. #define st_handler st_spare3
  50. #define st_amode   st_spare2
  51.  
  52. #define S_ISUID 0004000     /* set user id on execution */
  53. #define S_ISGID 0002000     /* set group id on execution */
  54.  
  55. #ifndef _POSIX_SOURCE
  56.   #define S_ISTXT 0001000   /* sticky bit */
  57. #endif
  58.  
  59. #define S_IRWXU 0000700     /* RWX mask for owner */
  60. #define S_IRUSR 0000400     /* R for owner */
  61. #define S_IWUSR 0000200     /* W for owner */
  62. #define S_IXUSR 0000100     /* X for owner */
  63.  
  64. #ifndef _POSIX_SOURCE
  65.   #define S_IREAD   S_IRUSR
  66.   #define S_IWRITE  S_IWUSR
  67.   #define S_IEXEC   S_IXUSR
  68. #endif
  69.  
  70. #define S_IRWXG 0000070     /* RWX mask for group */
  71. #define S_IRGRP 0000040     /* R for group */
  72. #define S_IWGRP 0000020     /* W for group */
  73. #define S_IXGRP 0000010     /* X for group */
  74. #define S_IRWXO 0000007     /* RWX mask for other */
  75. #define S_IROTH 0000004     /* R for other */
  76. #define S_IWOTH 0000002     /* W for other */
  77. #define S_IXOTH 0000001     /* X for other */
  78.  
  79. #ifndef _POSIX_SOURCE
  80.   #define S_IFMT   0170000  /* type of file */
  81.   #define S_IFIFO  0010000  /* named pipe (fifo) */
  82.   #define S_IFCHR  0020000  /* character special */
  83.   #define S_IFDIR  0040000  /* directory */
  84.   #define S_IFBLK  0060000  /* block special */
  85.   #define S_IFREG  0100000  /* regular */
  86.   #define S_IFLNK  0120000  /* symbolic link */
  87.   #define S_IFSOCK 0140000  /* socket */
  88.   #define S_ISVTX  0001000  /* save swapped text even after use */
  89.  
  90.   #define ACCESSPERMS   (S_IRWXU|S_IRWXG|S_IRWXO)       /* 0777 */
  91.                             /* 7777 */
  92.   #define ALLPERMS      (S_ISUID|S_ISGID|S_ISTXT|S_IRWXU|S_IRWXG|S_IRWXO)
  93.                             /* 0666 */
  94.   #define DEFFILEMODE   (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
  95.  
  96.   #define S_BLKSIZE 512     /* block size used in the stat struct */
  97. #endif
  98.  
  99. #define S_ISDIR(m)      ((m & 0170000) == 0040000)  /* directory */
  100. #define S_ISCHR(m)      ((m & 0170000) == 0020000)  /* char special */
  101. #define S_ISBLK(m)      ((m & 0170000) == 0060000)  /* block special */
  102. #define S_ISREG(m)      ((m & 0170000) == 0100000)  /* regular file */
  103. #define S_ISLNK(m)      ((m & 0170000) == 0120000)  /* symbolic link */
  104. #define S_ISFIFO(m)     ((m & 0170000) == 0010000)  /* fifo */
  105. #ifndef _POSIX_SOURCE
  106.   #define S_ISSOCK(m)   ((m & 0170000) == 0140000)  /* socket */
  107. #endif
  108.  
  109.  
  110. int     chmod (cchar *, mode_t);
  111. int     fstat(int, struct stat *);
  112. int     mkdir (cchar *, mode_t);
  113. int     stat  (cchar *, struct stat *);
  114. #ifndef _POSIX_SOURCE
  115.   int   lstat (cchar *, struct stat *);
  116. #endif
  117.  
  118. #ifdef __cplusplus
  119.   }
  120. #endif
  121.  
  122. #ifdef STORMAMIGA_UNIXPATH
  123.   __inline int chmod_u  (cchar *path, mode_t mode)
  124.   { return chmod        (path, mode); }
  125.  
  126.   __inline int lstat_u  (cchar *path, struct stat *sb)
  127.   { return lstat        (path, sb); }
  128.  
  129.   __inline int mkdir_u  (cchar *path, mode_t mode)
  130.   { return mkdir        (path, mode); }
  131.  
  132.   __inline int stat_u   (cchar *path, struct stat *sb)
  133.   { return stat         (path, sb); }
  134.  
  135.   #define chmod(path, mode)   chmod_u(UnixToAmigaPath(path), mode)
  136.   #define lstat(path, sb)     lstat_u(UnixToAmigaPath(path), sb)
  137.   #define mkdir(path, mode)   mkdir_u(UnixToAmigaPath(path), mode)
  138.   #define stat(path, sb)      stat_u(UnixToAmigaPath(path), sb)
  139. #endif
  140.  
  141. #endif /* SYS_STAT_H */
  142.  
  143.